// Copyright (c) 2014-2024, The Monero Project
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification, are
// permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice, this list of
//    conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
//    of conditions and the following disclaimer in the documentation and/or other
//    materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its contributors may be
//    used to endorse or promote products derived from this software without specific
//    prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

import QtQuick 2.9
import "." as MoneroComponents

Item {
    id: root

    property var onAcceptedCallback
    property var onWalletEntryCallback
    property var onRejectedCallback

    function open(canEnterOnDevice_) {
        var canEnterOnDevice = canEnterOnDevice_ !== null ? canEnterOnDevice_ : canEnterOnDevice
        root.visible = true;

        if (canEnterOnDevice) {
            entryChooserDialog.okText = qsTr("Hardware wallet")
            entryChooserDialog.cancelText = qsTr("Computer")
            entryChooserDialog.open()
        } else {
            openPassphraseDialog()
        }
    }

    function openPassphraseDialog() {
        root.visible = true
        passphraseDialog.openPassphraseDialog()
    }

    function close() {
        root.visible = false;
        if (entryChooserDialog.visible)
            entryChooserDialog.close()
        if (passphraseDialog.visible)
            passphraseDialog.close()
    }

    StandardDialog {
        id: entryChooserDialog
        title: qsTr("Hardware wallet passphrase") + translationManager.emptyString
        text: qsTr("Please select where you want to enter passphrase.\nIt is recommended to enter passphrase on the hardware wallet for better security.") + translationManager.emptyString

        onAccepted: {
            if (onWalletEntryCallback){
                onWalletEntryCallback()
            }
        }

        onRejected: {
            openPassphraseDialog()
        }

        onCloseCallback: {
            root.close()
        }
    }

    PasswordDialog {
        id: passphraseDialog
        anchors.fill: parent
        passphraseDialogMode: true

        onAcceptedPassphrase: {
            if (onAcceptedCallback)
                onAcceptedCallback(passphraseDialog.password);
        }

        onRejectedPassphrase: {
            if (onRejectedCallback)
                onRejectedCallback();
        }

        onCloseCallback: {
            root.close()
        }
    }
}
